/* eslint-disable max-len */

// type: form | table | picker
const getDescribleData = (type = 'form') => {
    const descData = [
        {
            params: 'fields',
            des: `表单控件配置${!['form'].includes(type) ? '；详细配置请查阅 【Form 表单】 组件内的 fields 字段' : ''}`,
            type: 'Object[]',
            values: ['form'].includes(type) ? '请查看公共配置项【fields】及表单项类型【fields】提供的特定配置' : '',
            defaultVal: '-',
            ...(['form'].includes(type) ? {
                details: [
                    {
                        title: '公共配置项【fields】',
                        describes: [
                            'fields 是个由 Object 组成的数组，里面每一个对象表示一个表单项控件的相关配置；',
                            'Object 对象内的 type 可以指定控件的类型，且不同的 type 对应着不同的特定配置字段，请从表单项类型【fields】表格中点击控件类型进入查看特定配置字段详情',
                            '下方列举了所有 type 均支持的公共配置字段',
                        ],
                        configList: [
                            {
                                params: 'label',
                                des: '表单项的名称，如果不传入或传入空，表单元素自动占满宽度',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'labelTips',
                                des: '表单项提示文案，配置该提示文案后，表单项名称后面会展示黄色问号，鼠标移入将展示该文案内容',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'code',
                                des: '必传，表单项绑定值的code（表单元素修改后的值，会通过该code保存在form对象里）',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'startCode',
                                des: '定义起始字段的 key（区间类型的控件才有效）',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'endCode',
                                des: '定义结束字段的 key（区间类型的控件才有效）',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'show',
                                des: '是否展示该表单项',
                                type: 'Boolean',
                                values: 'true | false',
                                defaultVal: 'true',
                            },
                            {
                                params: 'required',
                                des: '是否为必填项，配置必填项后，组件内部会根据控件类型和值类型动态制定必填规则 rules',
                                type: 'Boolean',
                                values: 'true | false',
                                defaultVal: 'false',
                            },
                            {
                                params: 'relationships',
                                des: '联动关系配置；其值是一个对象 Object；对象的 key(键) 是需要联动的其他表单项的 code，对象的 value(值) 用于指定被联动的表单项发起请求时的联动参数的字段名，如果被联动的表单项未配置 requestConfig，则对象的 value(值) 可以配置为 null',
                                type: 'Object',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'relationResults',
                                des: '运算结果配置函数；你也可以将其视作为类似于 formatter 格式化字段值的函数；其类型为 Function 或者 String(可被eval解析的function)，参数为表单对象 form，需要 return 一个结果，用于重写该表单项的值',
                                type: 'Function(form) | String',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'trans',
                                des: '字段转换规则，可以将选中数据行内的某些字段按照该规则进行转换，并写入表单对象内（仅对 type 为 \'table\'、\'tree\'、\'select\'、\'dropselect\'、\'check\'、\'radio\'、\'cascader\' 有效）',
                                type: 'Object[]',
                                values: '-',
                                defaultVal: '-',
                                details: [
                                    {
                                        title: '配置项【trans】',
                                        describes: [
                                            '可以将选中行内的某些字段按照该指定的规则进行转换，并写入表单对象内；trans 值类型为一个包含转换规则对象的数组，转换规则可以配置多个',
                                            '例如：[{ from: \'name\', to: \'firstName\' }] 即表示在选中数据行后，将行内的 \'name\' 字段对应的值赋值给 \'firstName\'， 然后额外存入表单 form 之中',
                                        ],
                                        configList: [
                                            {
                                                params: 'from',
                                                des: '表示数据行内的某个字段名',
                                                type: 'String',
                                                values: '-',
                                                defaultVal: '-',
                                            },
                                            {
                                                params: 'to',
                                                des: '表示转换后的字段名',
                                                type: 'String',
                                                values: '-',
                                                defaultVal: '-',
                                            },
                                        ],
                                    },
                                ],
                            },
                            {
                                params: 'size',
                                des: '表单项尺寸大小',
                                type: 'String',
                                values: '"large" | "default" | "small"',
                                defaultVal: '"default"',
                            },
                            {
                                params: 'className',
                                des: '表单项自定义类名',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                                version: '1.0.6',
                            },
                            {
                                params: 'width',
                                des: '自定义表单项宽度；默认情况下表单宽度是根据既定规则动态计算出来的宽度，如果你遇到某些特殊的表单项需要单独设置其宽度，那么你可能需要用到该字段；例：如果你希望当前表单项独占一行，你可以传入 "100%"',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'minWidth',
                                des: '定义表单项最小宽度',
                                type: 'String',
                                values: '-',
                                defaultVal: '"auto"',
                            },
                            {
                                params: 'formatedValueCode',
                                des: '当 type 为 "table" 或 "tree"，其选项是通过 requestConfig 自动请求的，且需要展示默认值时，组件只能通过 code 匹配到绑定值，而无法匹配到展示在输入框内的内容，此时就需要该字段传入用于展示初始内容',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'validateType',
                                des: '声明该表单项的值的校验类型；默认根据控件类型或绑定值的数据类型获取校验类型，若组件内部判断有误则需手动指定',
                                type: 'String',
                                values: '\'string\' |\'number\' |\'array\'',
                                defaultVal: '-',
                            },
                            {
                                params: 'rules',
                                des: '表单验证规则',
                                type: 'Object | Object[]',
                                values: '-',
                                defaultVal: '-',
                            },
                            {
                                params: 'showMessage',
                                des: '是否显示校验错误信息',
                                type: 'Boolean',
                                values: 'true | false',
                                defaultVal: 'true',
                            },
                            {
                                params: 'inlineMessage',
                                des: '是否在行内显示校验信息',
                                type: 'String | Boolean',
                                values: '-',
                                defaultVal: '""',
                            },
                            {
                                params: 'for',
                                des: '和原生标签相同能力',
                                type: 'String',
                                values: '-',
                                defaultVal: '-',
                            },
                        ],
                    },
                ],
            } : {}),
        },
        {
            params: 'form',
            des: '表单的初始值',
            type: 'Object',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'rowFieldSize',
            des: '一行最多展示多少个表单项',
            type: 'Number',
            values: '-',
            // eslint-disable-next-line no-nested-ternary
            defaultVal: ['form'].includes(type) ? '1' : (['picker'].includes(type) ? '3' : '4'),
        },
        {
            params: 'autoOperateBtnWidth',
            des: '提交/重置按钮组是否内联展示，配置为 false 则独占一行展示',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
            version: 'v1.0.3',
        },
        {
            params: 'operateBtnAlign',
            des: '提交/重置按钮组的排列方式',
            type: 'Boolean',
            values: '\'left\' / \'center\' / \'right\' / \'auto\'',
            defaultVal: '\'auto\'',
            version: 'v1.0.7',
        },
        {
            params: 'showExpand',
            des: '是否需要折叠表单项的功能按钮',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: `${!['form'].includes(type)}`,
        },
        {
            params: 'defaultExpandFields',
            des: '当 showExpand 为 true 时，且设置没有展开全部的表单项（defaultExpandAll 为 false），则初始时展示多少个表单项',
            type: 'Number',
            values: '-',
            defaultVal: '4',
        },
        {
            params: 'size',
            des: '表单尺寸',
            type: 'String',
            values: '"large" | "default" | "small"',
            defaultVal: '"default"',
        },
        ...(['form'].includes(type) ? [{
            params: 'border',
            des: '是否展示边框',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        }] : []),
        {
            params: 'enterable',
            des: '是否支持敲回车触发表单提交',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        ...(['form'].includes(type) ? [{
            params: 'disabled',
            des: '是否禁用该表单内的所有组件。 如果设置为 true, 它将覆盖内部组件的 disabled 属性',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        }] : []),
        {
            params: 'isSubmit',
            des: '是否需要提交按钮',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'isReset',
            des: '是否需要重置按钮',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'submitText',
            des: '提交按钮文案',
            type: 'String',
            values: '-',
            defaultVal: ['form'].includes(type) ? '"提交' : '"查询"',
        },
        {
            params: 'resetText',
            des: '重置按钮文案',
            type: 'String',
            values: '-',
            defaultVal: '"重置"',
        },
        {
            params: 'beforeSubmit',
            des: '点击提交表单的按钮后，即将执行提交表单操作前的回调，返回 false 或者返回 Promise 且被 reject 则中断提交动作',
            type: 'Function(params)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'expandText',
            des: '表单下方 "收起/展开" 按钮的追加的文案',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'rules',
            des: '表单验证规则',
            type: 'Object',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'labelPosition',
            des: '表单域标签的位置， 当设置为 "left" 或 "right" 时，则也需要设置 labelWidth 属性',
            type: 'String',
            values: '"left" | "right" | "top"',
            defaultVal: '"right"',
        },
        {
            params: 'labelWidth',
            des: '标签 label 的长度; 允许设置 "auto"',
            type: 'String | Number',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'labelSuffix',
            des: '表单域标签的后缀',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'hideRequiredAsterisk',
            des: '是否隐藏必填字段标签旁边的红色星号',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'requireAsteriskPosition',
            des: '星号的位置',
            type: 'String',
            values: '"left" | "right"',
            defaultVal: '"left"',
        },
        {
            params: 'showMessage',
            des: '是否显示校验错误信息',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'inlineMessage',
            des: '是否以行内形式展示校验信息',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'statusIcon',
            des: '是否在输入框中显示校验结果反馈图标',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        ...(['form'].includes(type) ? [
            {
                params: 'scrollToError',
                des: '当校验失败时，是否滚动到第一个错误表单项',
                type: 'Boolean',
                values: 'true | false',
                defaultVal: 'false',
            },
            {
                params: 'scrollIntoViewOptions',
                des: '当校验有失败结果时，滚动到第一个失败的表单项目 可通过 scrollIntoView 配置',
                type: 'Boolean | Object',
                values: '-',
                defaultVal: '-',
            },
        ] : []),
    ];

    if (['form'].includes(type)) {
        return descData.map((d) => ({
            ...d,
            params: (d.params || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(),
        }));
    }
    return descData;
};

export default getDescribleData;
